class C:
    def __init__(self, x):
        # Python 把一切交给程序员，没有类似 java 的私有变量的概念
        # 约定通过 __x 的命名方式表示这是一个私有变量

        # 私有变量
        self.__x = x

    def set_x(self, x):
        self.__x = x

    def get_x(self):
        return self.__x


c = C(250)
# AttributeError: 'C' object has no attribute '__x'
# 无法通过变量名次访问该变量
# print(c.__x)
print(c.get_x())  # 250
c.set_x(520)
print(c.get_x())  # 520

# 如果硬是要直接访问私有变量
print(c.__dict__)  # {'_C__x': 520}
# 我们发现它是 _C__x
print(c._C__x)  # 520,名字改变术


class D:

    # 私有方法
    def __func(self):
        print("Hello FishC")


d = D()

# AttributeError: 'D' object has no attribute '__func'
# d.__func()

# 如果硬是要直接访问私有方法
d._D__func()  # Hello FishC

# 在对象创建之后，是否可以创建私有变量呢？

c = C(250)
c.__y = 250
print(c.__dict__)  # {'_C__x': 250, '__y': 250} 发现：后面添加的不会进行名字改编，由此可见名字改编发生在类的实例化过程中
